﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Configuration;
using System.Data;
using System.Configuration.Assemblies;

namespace HZ.Common
{
    public class OperateConfig
    {
        public string strFileName;
        public string configName;
        ///<summary> 
        ///依据连接串名字connectionName返回数据连接字符串 
        ///</summary> 
        ///<param name="connectionName"></param> 
        ///<returns></returns> 
        private string GetConnectionStringsConfig(string connectionName)
        {
            string connectionString =
            ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();
            return connectionString;
        }

        ///<summary> 
        ///更新连接字符串 
        ///</summary> 
        ///<param name="newName">连接字符串名称</param> 
        ///<param name="newConString">连接字符串内容</param> 
        ///<param name="newProviderName">数据提供程序名称</param> 
        private void UpdateConnectionStringsConfig(string newName,string newConString,string newProviderName)
        {
            bool isModified = false; //记录该连接串是否已经存在 
            //如果要更改的连接串已经存在 
            if (ConfigurationManager.ConnectionStrings[newName] != null)
            {
                isModified = true;
            }
            //新建一个连接字符串实例 
            ConnectionStringSettings mySettings =new ConnectionStringSettings(newName, newConString, newProviderName);
            // 打开可执行的配置文件*.exe.config 
            Configuration config =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            // 如果连接串已存在，首先删除它 
            if (isModified)
            {
                config.ConnectionStrings.ConnectionStrings.Remove(newName);
            }
            // 将新的连接串添加到配置文件中. 
            config.ConnectionStrings.ConnectionStrings.Add(mySettings);
            // 保存对配置文件所作的更改 
            config.Save(ConfigurationSaveMode.Modified);
            // 强制重新载入配置文件的ConnectionStrings配置节 
            ConfigurationManager.RefreshSection("ConnectionStrings");
        }

        ///<summary> 
        ///返回＊.exe.config文件中appSettings配置节的value项 
        ///</summary> 
        ///<param name="strKey"></param> 
        ///<returns></returns> 
        private string GetAppConfig(string strKey)
        {
            foreach (string key in ConfigurationManager.AppSettings)
            {
                if (key == strKey)
                {
                    return ConfigurationManager.AppSettings[strKey];
                }
            }
            return null;
        }

        //得到程序的config文件的名称以及其所在的全路径
        public void SetConfigName(string strConfigName)
        {
            configName = strConfigName;
            //获得配置文件的全路径
            GetFullPath();
        }

        //获得配置文件的全路径
        public void GetFullPath()
        {       
           strFileName=AppDomain.CurrentDomain.BaseDirectory.ToString()+configName;
        }


        ///<summary> 
        ///在＊.exe.config文件中appSettings配置节增加一对键、值对 
        ///</summary> 
        ///<param name="newKey"></param> 
        ///<param name="newValue"></param> 
        private  void InsertAppConfig(string newKey, string newValue)
        {
            bool isModified = false;
            foreach (string key in ConfigurationManager.AppSettings)
            {
                if (key == newKey)
                {
                    isModified = true;
                }
            }
            Configuration config =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            if (isModified)
            {
                config.AppSettings.Settings.Remove(newKey);
            }
            config.AppSettings.Settings.Add(newKey, newValue);
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
        }

        /// <summary> 
        /// 写入Key，Value 到XML文件 
        /// </summary> 
        /// <param name="Key"></param> 
        /// <param name="Value"></param> 
        public void UpdateAppConfig(string Key, string Value)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(strFileName);
            //找出名称为“add”的所有元素 
            XmlNodeList nodes = doc.GetElementsByTagName("add");
            for (int i = 0; i < nodes.Count; i++)
            {
                //获得将当前元素的key属性 
                XmlAttribute att = nodes[i].Attributes["key"];
                //根据元素的第一个属性来判断当前的元素是不是目标元素 
                if (att.Value == Key)
                {
                    //对目标元素中的第二个属性赋值 
                    att = nodes[i].Attributes["value"];
                    att.Value = Value;
                    break;
                }
            }
            //保存上面的修改 
            doc.Save(strFileName);

        } 

    }
}

